package com.school.test;

import com.school.entity.Course;
import com.school.entity.Student;
import com.school.entity.Teacher;

/**
 * 测试类：跨包调用 entity 包的类，验证继承功能与权限控制
 * 功能：模拟教师开课、学生选课/退课、打印课表、权限访问验证
 */
public class TestCourseSelection {
    public static void main(String[] args) {
        // 1. 创建教师对象（子类 Teacher 继承自 Person）
        Teacher teacher1 = new Teacher("T001", "张老师", "男");
        Teacher teacher2 = new Teacher("T002", "李老师", "女");

        // 2. 创建课程对象
        Course course1 = new Course("C001", "Java 程序设计", "第一教学楼 301", "周一 14:00-16:00");
        Course course2 = new Course("C002", "数据结构", "第二教学楼 202", "周三 10:00-12:00");

        // 3. 教师开课（调用 Teacher 个性化方法）
        teacher1.offerCourse(course1);
        teacher2.offerCourse(course2);

        // 4. 创建学生对象（子类 Student 继承自 Person）
        Student student1 = new Student("S001", "小明", "男");
        Student student2 = new Student("S002", "小红", "女");

        // 5. 学生选课（调用 Student 个性化方法）
        student1.selectCourse(course1);
        student1.selectCourse(course2);
        student2.selectCourse(course1);

        // 6. 打印教师授课表（调用重写后的 printWorksheet()）
        System.out.println("【教师工作单打印结果】");
        teacher1.printWorksheet();
        teacher2.printWorksheet();

        // 7. 打印学生课表（调用重写后的 printWorksheet()）
        System.out.println("【学生工作单打印结果】");
        student1.printWorksheet();
        student2.printWorksheet();

        // 8. 学生退课，再次打印课表
        System.out.println("【学生退课后课表更新】");
        student1.dropCourse(course2);
        student1.printWorksheet();

        // 9. 验证权限控制（跨包访问 entity 包的 Person 类属性）
        System.out.println("【权限控制验证结果】");
        // ① 访问父类 private 属性：需通过 Getter（getId()）
        System.out.println("student1 学号（private 属性）：" + student1.getId());
        // ② 访问父类 protected 属性：可直接访问（name 是 protected，子类跨包可见）
        System.out.println("student1 姓名（protected 属性）：" + student1.getName());
        // ③ 访问父类 default 属性：跨包不可见（gender 无修饰符，解除注释会编译报错）
        // System.out.println(student1.gender); // 编译报错：'gender' has protected access in 'com.school.entity.Person'
    }
}